package si.banst.tecajnice.ejb.prestrezniki;

import java.util.Date;
import java.util.logging.Logger;

import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;

import si.banst.sledi.ZapisSledi;
import si.banst.sledi.ejb.SlediBeanRemote;

public class SledenjeZahtevam {
	private static final Logger logger = Logger
			.getLogger(SledenjeZahtevam.class.getName());

	private static final String VRSTA_SLEDI = "TecajniceZahteve";

	@EJB(lookup="corbaname:iiop:sledi.banst.si:2810#SlediBean")
	private SlediBeanRemote slediBean;

	@Resource
	private SessionContext sessionContext;

	@AroundInvoke
	public Object zapisSledi(final InvocationContext context) throws Exception {
		logger.finest("Prestrezam zahtevo.");
		if (context == null) {
			logger.severe("Kontekst je null.");
			throw new Exception("Kontekst je null.");
		}

		ZapisSledi zapisSledi = new ZapisSledi();

		zapisSledi.setVrstaSledi(VRSTA_SLEDI);

		zapisSledi.setCasSledi(new Date());
		zapisSledi.addElement("poverilnica", sessionContext
				.getCallerPrincipal().getName());
		zapisSledi.addElement("komponenta", context.getTarget().getClass()
				.getName());
		zapisSledi.addElement("metoda", context.getMethod().getName());

		for (int i = 0; i < context.getParameters().length; i++) {
			zapisSledi.addElement("parameter-" + i,
					context.getParameters()[i].toString());
		}

		for (String naziv : context.getContextData().keySet()) {
			zapisSledi.addElement(naziv, context.getContextData().get(naziv)
					.toString());
		}

		logger.info("Zapis sledi: " + zapisSledi);
		slediBean.vstaviSled(zapisSledi);

		return context.proceed();

	}
}
